package br.com.components;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

import br.com.util.DateUtil;

@Named
@SessionScoped
public class DataPeriodoComponent implements Serializable {
   
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/** ATRIBUTOS ********************/
	
	private static List<DataPeriodo> listDataPeriodo;
	private DataPeriodo dataPeriodoSelecionado = new DataPeriodo();
	private String dataFieldFilter;
	private Boolean isEscolherPeriodo = false;
	
	
	/** METODOS **********************/
	
	public void gerarPeriodos() {
		
		DataPeriodo dataPeriodo;
		List<Date> listPeriodo = new ArrayList<Date>();
		
		/** INICIANDO VARIAVEIS       **/
		/*******************************/
		
		Date dataInicial      = DateUtil.criarData(1, DateUtil.getMesAtual(), DateUtil.getAnoAtual());
		Date dataFinal        = DateUtil.criarData(31, DateUtil.getMesAtual(), DateUtil.getAnoAtual());
		String dateInicialStr = DateUtil.getDataStringStyleCombo(dataInicial);
		String dateFinalStr   = DateUtil.getDataStringStyleCombo(dataFinal);
		listDataPeriodo       = new ArrayList<DataPeriodo>(); 
		dataPeriodo           = new DataPeriodo(); 
		
		/** INICIANDO CRIACAO DE LIST **/
		/*******************************/
		
		/** HOJE **/
		dataPeriodo = new DataPeriodo();
		dataPeriodo.setId(1);
		dataPeriodo.setDataInicial(DateUtil.getDataAtual());
		dataPeriodo.setDataFinal(DateUtil.getDataAtual());
		dataPeriodo.setDataLabel("Hoje");
		listDataPeriodo.add(dataPeriodo);
		
		/** PERIODO **/
		dataPeriodo = new DataPeriodo(); 
		dataPeriodo.setId(2);
		dataPeriodo.setDataInicial(dataInicial);
		dataPeriodo.setDataFinal(dataFinal);
		dataPeriodo.setDataLabel(dateInicialStr + " - " + dateFinalStr);
		listDataPeriodo.add(dataPeriodo);
		
		/** MES PASSADO **/
		dataPeriodo = new DataPeriodo();
		dataPeriodo.setId(3);
		listPeriodo = DateUtil.getDataPeriodoMesPassado(DateUtil.getDataAtual());
		dataPeriodo.setDataInicial(listPeriodo.get(0));
		dataPeriodo.setDataFinal(listPeriodo.get(1));
		dataPeriodo.setDataLabel("Mês passado");
		listDataPeriodo.add(dataPeriodo);
		
		/** ESTA SEMANA **/
		dataPeriodo = new DataPeriodo();
		dataPeriodo.setId(4);
		listPeriodo = DateUtil.getDataPeriodoSemana(DateUtil.getDataAtual());
		dataPeriodo.setDataInicial(listPeriodo.get(0));
		dataPeriodo.setDataFinal(listPeriodo.get(1));
		dataPeriodo.setDataLabel("Esta semana");
		listDataPeriodo.add(dataPeriodo);
		
		/** ESTE MES  **/
		dataPeriodo = new DataPeriodo();
		dataPeriodo.setId(5);
		listPeriodo = DateUtil.getDataPeriodoMes(DateUtil.getDataAtual());
		dataPeriodo.setDataInicial(listPeriodo.get(0));
		dataPeriodo.setDataFinal(listPeriodo.get(1));
		dataPeriodo.setDataLabel("Este mês");
		listDataPeriodo.add(dataPeriodo);
		
		/** ULTIMOS 30 DIAS  **/
		dataPeriodo = new DataPeriodo();
		dataPeriodo.setId(6);
		listPeriodo = DateUtil.getDataPeriodoUltimos30Dias(DateUtil.getDataAtual());
		dataPeriodo.setDataInicial(listPeriodo.get(0));
		dataPeriodo.setDataFinal(listPeriodo.get(1));
		dataPeriodo.setDataLabel("Últimos 30 dias");
		listDataPeriodo.add(dataPeriodo);
		
		/** MOSTRAR TODOS  **/
		dataPeriodo = new DataPeriodo();
		dataPeriodo.setId(7);
		dataPeriodo.setDataLabel("Mostrar Todos");
		listDataPeriodo.add(dataPeriodo);
		
		/** MOSTRAR TODOS  **/
		dataPeriodo = new DataPeriodo();
		dataPeriodo.setId(8);
		dataPeriodo.setDataLabel("[ Escolher Período ]");
		listDataPeriodo.add(dataPeriodo);
	}
	
	
	/** BUSCANDO POR ID **/
	public static DataPeriodo buscarDataPeridoPorId(int id) {
		DataPeriodo dataPeriodo = listDataPeriodo.get(id - 1);
		return dataPeriodo;
	}
	
	/** SELECT PERIODO **/
	public void escolherPeriodo(DataPeriodo dataPeriodo) {
		
		if (dataPeriodo.getId().equals(8) ) {
			isEscolherPeriodo = true;
			dataPeriodo.setDataInicial(DateUtil.getPrimeiroDiaMes(DateUtil.getDataAtual()));
			dataPeriodo.setDataFinal(DateUtil.getUltimoDiaMes(DateUtil.getDataAtual()));
		}
		
		dataPeriodo.setDataFieldFilter(this.dataFieldFilter);
	}
	
	/** SELECT DATA FIELD FILTER **/
	public void setDataFieldFielter(String field) {
		this.dataFieldFilter = field;
	}
	
	/** APLICAR PERIODO **/
	public void retornar() {
		isEscolherPeriodo = false;
	}


	/** GET E SET'S ********************/
	
	public List<DataPeriodo> getListDataPeriodo() {
		if (listDataPeriodo == null)
			this.gerarPeriodos();
		
		return listDataPeriodo;
	}

	public DataPeriodo getDataPeriodoSelecionado() {
		return dataPeriodoSelecionado;
	}

	public void setDataPeriodoSelecionado(DataPeriodo dataPeriodoSelecionado) {
		this.dataPeriodoSelecionado = dataPeriodoSelecionado;
	}


	public Boolean getIsEscolherPeriodo() {
		return isEscolherPeriodo;
	}


	public void setIsEscolherPeriodo(Boolean isEscolherPeriodo) {
		this.isEscolherPeriodo = isEscolherPeriodo;
	}


	public String getDataFieldFilter() {
		return dataFieldFilter;
	}


	public void setDataFieldFilter(String dataFieldFilter) {
		this.dataFieldFilter = dataFieldFilter;
	}
	
}

